por Lieby Cardoso

Este conjunto de dados foi simulado e disponibilizado por Ludovic Benistant para o site Kaggle. Fonte: Kaggle - Ludovic Benistant - Hr Analytics

Atributos:

  1. satisfaction_level: Nível de satisfação do colaborador
  2. last_evaluation: Nota da última avaliação
  3. number_project: Número de projetos trabalhados
  4. average_montly_hours: Média mensal de horas trabalhadas
  5. time_spend_company: Anos de trabalho na empresa
  6. Work_accident: 0 - Não teve acidente de trabalho e 1 - Teve acidente de trabalho
  7. left: Indicador de demissão, 0 - Contratado e 1 - Desligado
  8. promotion_last_5years: Indicativo de promoção, 0 - Não e 1 - Sim
  9. sales: Departamento
  10. salary: Classificação do salário, Baixo, Médio e Alto

Objetivo O objetivo deste projeto é explorar as variáveis do conjunto de dados hr que podem auxiliar na identificação dos fatores que levaram alguns colaboradores a deixarem a empresa. Durante a investigação estas perguntas serão respondidas:

  1. Os colaboradores que saíram recebiam baixo salário?
  2. Será que é perceptível a insatisfação do colaborador?
  3. Excesso de trabalho, foi um fator negativo?
##  [1] "satisfaction_level"    "last_evaluation"      
##  [3] "number_project"        "average_montly_hours" 
##  [5] "time_spend_company"    "Work_accident"        
##  [7] "left"                  "promotion_last_5years"
##  [9] "sales"                 "salary"

** Visão Geral dos dados**

Sumário das informações:

##  satisfaction_level last_evaluation  number_project  average_montly_hours
##  Min.   :0.0900     Min.   :0.3600   Min.   :2.000   Min.   : 96.0       
##  1st Qu.:0.4400     1st Qu.:0.5600   1st Qu.:3.000   1st Qu.:156.0       
##  Median :0.6400     Median :0.7200   Median :4.000   Median :200.0       
##  Mean   :0.6128     Mean   :0.7161   Mean   :3.803   Mean   :201.1       
##  3rd Qu.:0.8200     3rd Qu.:0.8700   3rd Qu.:5.000   3rd Qu.:245.0       
##  Max.   :1.0000     Max.   :1.0000   Max.   :7.000   Max.   :310.0       
##                                                                          
##  time_spend_company Work_accident         left       
##  Min.   : 2.000     Min.   :0.0000   Min.   :0.0000  
##  1st Qu.: 3.000     1st Qu.:0.0000   1st Qu.:0.0000  
##  Median : 3.000     Median :0.0000   Median :0.0000  
##  Mean   : 3.498     Mean   :0.1446   Mean   :0.2381  
##  3rd Qu.: 4.000     3rd Qu.:0.0000   3rd Qu.:0.0000  
##  Max.   :10.000     Max.   :1.0000   Max.   :1.0000  
##                                                      
##  promotion_last_5years         sales         salary    
##  Min.   :0.00000       sales      :4140   high  :1237  
##  1st Qu.:0.00000       technical  :2720   low   :7316  
##  Median :0.00000       support    :2229   medium:6446  
##  Mean   :0.02127       IT         :1227                
##  3rd Qu.:0.00000       product_mng: 902                
##  Max.   :1.00000       marketing  : 858                
##                        (Other)    :2923

Os dados são consistentes e analisando o valor mínimo, médio, mediana e valor máximo, não foi possível verificar nesta análise inicial a existência de outliers.

Vamos conferir qual a estrutura dos dados, e se será necessário manipular os tipos das variáveis para auxiliar a análise.

str(hr)
## 'data.frame':    14999 obs. of  10 variables:
##  $ satisfaction_level   : num  0.38 0.8 0.11 0.72 0.37 0.41 0.1 0.92 0.89 0.42 ...
##  $ last_evaluation      : num  0.53 0.86 0.88 0.87 0.52 0.5 0.77 0.85 1 0.53 ...
##  $ number_project       : int  2 5 7 5 2 2 6 5 5 2 ...
##  $ average_montly_hours : int  157 262 272 223 159 153 247 259 224 142 ...
##  $ time_spend_company   : int  3 6 4 5 3 3 4 5 5 3 ...
##  $ Work_accident        : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ left                 : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ promotion_last_5years: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ sales                : Factor w/ 10 levels "accounting","hr",..: 8 8 8 8 8 8 8 8 8 8 ...
##  $ salary               : Factor w/ 3 levels "high","low","medium": 2 3 3 2 2 2 2 2 2 2 ...

O conjunto de dados é composto por 14.999 observações e 10 variáveis. Não tem nenhuma variável que seja uma identificação única do colaborador, então vamos considerar que cada registro corresponde a uma pessoa, sem duplicação.

hr$salary<-ordered(hr$salary,levels=c("low","medium","high"))

O nível de satisfação do colaborador será agrupado em três níveis: SIM, NÃO e REGULAR.

# Cria novo campo satisfied no conjunto de dados hr
hr$satisfied <- as.factor(ifelse(hr$satisfaction_level<=.40, "NAO", 
                                 ifelse(hr$satisfaction_level<=.70, "REGULAR", 
                                        "SIM")))

Conferindo os campos criados:

table(hr$satisfied)
## 
##     NAO REGULAR     SIM 
##    3124    5577    6298

Será que existem valores nUlos? Vamos percorrer todas as variáveis somando todos os valores nulos.

# Verifica o total de NA em cada campo
colSums(is.na(hr))
##    satisfaction_level       last_evaluation        number_project 
##                     0                     0                     0 
##  average_montly_hours    time_spend_company         Work_accident 
##                     0                     0                     0 
##                  left promotion_last_5years                 sales 
##                     0                     0                     0 
##                salary             satisfied 
##                     0                     0

O conjunto de dados está completamente preenchido e não será necessário manipular estes valores.

Seção de Gráficos Univariados

Nesta seção, as variáveis foram agrupadas em dois grupos, no primeiro vamos explorar as informações que nos ajudam a caracterizar a empresa e no segundo, as variáveis que nos auxiliam a entender o perfil dos colaboradores contratados e desligados.

Como é a empresa?

Proporção de desligados:

prop.table(table(hr$left))
## 
##         0         1 
## 0.7619175 0.2380825

Left, a variável foco da análise, está dividida entre contratados, ou seja, os que ainda estão na empresa e os desligados, que não fazem mais parte da empresa. Dos 14.999 colaboradores totais, 3.571 foram desligados e 11.428 estão na ativa. A proporção de colaboradores que deixaram a empresa é de 24% do conjunto de dados.

A distribuição é assimétrica positiva, sendo que há uma redução do número de colaboradores por ano a medida que se aproxima da cauda direita. Vamos conferir essa tendência e confirmar se o valor de mediana menor que o da média através do sumário estatístico da variável time_spend_company:

summary(hr$time_spend_company)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.000   3.000   3.000   3.498   4.000  10.000

A mediana é de 3 anos, correspondendo ao ano que de fato tem a maior quantidade de colaboradores, sendo 6.443 pessoas. O maior volume (75%) de colaboradores do conjunto de dados trabalhou entre 2 e 4 anos, sendo o limite do 3º quartil no 4º ano.

Este é um dado inesperado para mim. Entre o total de 14.999 colaboradores registrados no conjunto de dados, 2.169 sofreram acidente de trabalho, ou seja, 14% do total. Para traçar um comparativo, segundo dados do Fundacentro - Ministério do Trabalho, em 2013, foram registradas na previdência 717.911 pessoas acidentadas, num total de 96 milhões de pessoas empregadas. Isso nos dá um percentual de 0,75%, bem inferior aos 14% registrados pela nossa empresa.

A média mensal de horas trabalhadas tem uma distribuição bimodal, apresentando um pico entre 140 e 155 horas e outro aproximadamente entre 245 e 265 horas.

Sumário estatístico da variável average_montly_hours:

summary(hr$average_montly_hours)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    96.0   156.0   200.0   201.1   245.0   310.0

# Agrupa o total de resultados por departamento
Funcionarios_departamento <- aggregate(hr$sales, by=list(hr$sales),
                                       FUN = length)

formattable(Funcionarios_departamento, 
            list(x = color_tile("white", "#6699CC")))
Group.1 x
accounting 767
hr 739
IT 1227
management 630
marketing 858
product_mng 902
RandD 787
sales 4140
support 2229
technical 2720

O departamento Sales é o com a maior quantidade de colaboradores, seguido pelo departamento Technical e Support, somando 9.089 colaboradores. O Management é o menor deles com 630 colaboradores.

Pouquíssimas pessoas promovidas. Somente 2% das pessoas já foram promovidas. Conhecer a política de plano de carreira seria importante para entender essa escassez de promoções.

Perfil dos colaboradores

Não há registro de que alguém tenha trabalhado em um único projeto. Os colaboradores trabalharam em no mínimo 2 e no máximo 7 projetos.

summary(hr$number_project)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   2.000   3.000   4.000   3.803   5.000   7.000

Na média as pessoas trabalharam em 4 projetos.

sum(hr$last_evaluation >= 0.7)
## [1] 8015

A empresa é composta por uma maioria de colaboradores com avaliação média a alta. Para esta análise vamos considerar que uma nota igual ou superior a 7 é considerada alta. Assim, temos 8.015 colaboradores bem avaliados pela empresa, isso corresponde a 53% das pessoas.

sum(hr$satisfaction_level <= 0.3)
## [1] 1941
sum(hr$satisfaction_level >= 0.7)
## [1] 6503

É possível observar que existem colaboradores com um nível de satisfação baixo (<0.3). Do total, 1.941 pessoas registraram um nível de satisfação abaixo de 0.3. Na outra ponta da distribuição, temos 6.502 colaboradores com um nível de satisfação igual ou acima de 0.7.

A faixa de satisfação foi criada para fornecer mais um elemento de comparação entre os contratados e desligados. Para o propósito desta análise, considere que as faixas: Não = Nível de satisfação igual ou inferior a 0.4 Regular = Nível de satisfação entre 0.4 e 0.7 Sim = Nível de satisfação superior ou igual a 0.7

# Calcula a proporção de registros for faixa de satisfação agrupado pelo status da contratação
prop.table(table(subset(hr, select=c(satisfied, left))),2)
##          left
## satisfied         0         1
##   NAO     0.1215436 0.4858583
##   REGULAR 0.4089954 0.2528703
##   SIM     0.4694610 0.2612714

Quando nós comparamos as proporções entre os contratados e desligados, percebemos que para os contratados as faixas de satisfação que prevalecem são as de satisfeitos e satisfação regular, correspondendo as duas à 87% dos contratados. Para os desligados a faixa de insatisfeitos sozinha corresponde a 49% desse conjunto. É bastante significativo pensar que metade dos desligados não estavam satisfeitos.

Entre os contratados observamos que os satisfeitos formam o maior grupo, seguido pelos de satisfação regular, indivíduos insatisfeitos são a minoria.

Análise Univariada

Qual é a estrutura do conjunto de dados?

A estrutura de dados é composta por 14.999 observações, 10 variáveis importadas com o arquivo original. Foi adicionado a variável satisfied para representar em 3 faixas (SIM, REGULAR, NÃO) a satisfação do colaborador.

A variável left representa o status da contração, com o domínio: 0 = Pessoas que ainda estão contratadas 1 = Pessoas que foram desligadas da empresa

No conjunto de dados temos 8 variáveis númericas e 2 categóricas. A variável categórica sales tem 10 níveis e salary tem 3.

Quais são os principais atributos de interesse deste conjunto de dados?

A principal variável de interesse do conjunto é left, que informa se o colaborador está na empresa ou se foi desligado. A variável com o nível de satisfação (satisfaction_level) também será foco da análise, uma vez que, a correlação das outras variáveis com ela pode ajudar a compreender os motivos que levaram as pessoas a deixarem a empresa.

Quais outros atributos você acha que podem lhe auxiliar na investigação destes atributos de interesse?

  1. promotion_last_5years: O total de promoções recebidas pode gerar uma insatisfação no colaborador se ele supor que não foi reconhecido;

  2. time_spend_company: O tempo passado numa empresa pode gerar uma necessidade de sair da empresa, nem sempre por uma causa negativa, as vezes motivado pela vontade de viver novos desafios;

  3. salary: Essa variável é categorica com os valores baixo, médio e alto. A relação da remuneração com o satisfação e a decisão de saída será avaliado, apesar de várias pesquisas indicarem que o salário nem sempre é um grande influenciador nesta decisão. É possível que variáveis como número de promoções e nota recebida na ultima avaliação pesem mais na sensação de ter o trabalho reconhecido e este é um fator importante;

  4. number_project: Esta variável traz o total de projetos trabalhados pela pessoa, não sabemos se é o total em determinado período ou durante toda a permanência na empresa, mas, mesmo assim, podemos explorar questões como: as pessoas com mais números de projetos eram mais satisfeitas ou se sentiam sobrecarregadas e deixaram a empresa?

  5. sales: Há algum departamento problemático com baixo nível de satisfação? Acredito que esta questão é importante de ser investigada e pode ser impactante no resultado final.

Você criou novas variáveis a partir dos atributos existentes no conjunto de dados?

O conjunto de dados estava bem consistente, e somente uma alteração foi realizada.

Foi criada a variável satisfied, do tipo factor com 3 níveis: SIM, NAO e REGULAR. O objetivo desse campo é facilitar na visualização das faixas de satisfação dos colaboradores. As faixas definidas para este projeto sem qualquer compromisso com valores padrões de um departamento de recursos humanos.

Dos atributos investigados, distribuições incomuns foram encontradas? Você aplicou operações nos dados para limpá-los, ajustá-los ou mudar a forma dos dados? Se sim, por quê?

Pesquisei variáveis NA, mas o grupo não tinha nenhuma. Variáveis sem conteúdo não foram pesquisadas porque na importação do arquivo eu atribui por padrão o valor NA para elas (na.strings=c(“”,“NA”)), então, automaticamente ao pesquisar por NA, eu já estava pesquisando pelas vazias.

Em alguns gráficos, transformei a variável left em factor para auxiliar o agrupamento dos dados em 0 e 1, e não na média destes dois números.

Observando o sumário das variáveis, os dados são consistentes e sem outliers, portanto não foi necessário manipular o conteúdo.

Reordenei o conteúdo de salary para que na impressão dos gráficos eu conseguisse demonstrar os dados de forma sequêncial (Low => Medium => High).

A variável salary, cujo conteúdo é a faixa do salário (alto, médio, baixo), seria uma ótima candidata a ter a operação log10 aplicada a seu conteúdo caso ele fosse o valor monetário do salário.

Seção de Gráficos Bivariados

Agora que já conhecemos um pouco as variáveis do conjunto de dados, vamos verificar como elas se relacionam. Nesta seção tentaremos responder as perguntas descritas no ínicio do trabalho.

Os colaboradores que saíram recebiam baixo salário?

Quando colocamos em perspectiva as faixas de salário por departamento agrupado pelo status da contratação, é possível visualizar a diferença na distribuição das faixas de salário entre os contratados e demitidos. Para os desligados percebemos poucas ocorrências de altos salários, estando a maioria dessas ocorrências nos departamentos Technical e Sales. No departamento Management não foi registrado colaboradores com alto salário entre os demitidos, mas entre os contratados este é o departamento em que a maioria dos colaboradores recebe um salário alto. Este padrão não se repete nos outros departamentos.

Investigando um pouco mais o departamento, vamos ver a proporção de pessoas que saíram de cada um deles.

Departamento 0 1
accounting 73 27
hr 71 29
IT 78 22
management 86 14
marketing 76 24
product_mng 78 22
RandD 85 15
sales 76 24
support 75 25
technical 74 26

Os departamentos de gerencia (management) e pesquisa e desenvolvimento (RandD) tiveram a menor evasão de colaboradores. Os outros departamentos tiveram de 22 a 29% dos seus colaboradores desligados. Abaixo podemos ver esta distribuição:

Nós encontramos uma distribuição dos dados bem similar entre os contratados, eles trabalharam de 150 a 250 horas no mês. Já para os desligados, o que a gente observa é uma distribuição com uma mínina inferior a 150 e máximas acima de 250 horas mensais. Nos gráficos anteriores vimos que eles tendem a ganhar menos, mas só com aquela informação imaginei que pudessem trabalhar menos, mas agora, constatamos que ao contrário do que pensei, eles trabalharam por mais horas, principalmente no departamento RandD onde foi registrada uma media maior. No departamento de marketing e hr, as pessoas trabalharam entre 150 e 250h, mas com uma mediana menor.

Vou criar um novo dataset com a média de horas trabalhadas por cada departamento agrupada por contratados e Desligados, assim conseguimos confirmar essas constatações:

Departamento Contratado Desligado
accounting 199.0373 207.0294
hr 199.2500 197.3070
IT 198.8868 213.8498
management 200.2338 207.2637
marketing 198.8885 200.9901
product_mng 197.7656 207.7879
RandD 198.9520 210.9752
sales 199.5717 205.0414
support 199.1410 205.6360
technical 198.4711 214.1836

Com exceção do departamento de recursos humanos (hr), os colaboradores que se desligaram da empresa trabalharam em média mais do que os dos outros departamentos mesmo, atingindo uma média mensal superior a 200 horas. Foram realçados em vermelho os casos em que o grupo de desligados trabalhou por mais horas.

Sumário estatístico da variável average_montly_hours para os contratados e desligados respectivamente:

## 
##     0     1 
## 11428  3571
## hr$left: 0
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    96.0   162.0   198.0   199.1   238.0   287.0 
## -------------------------------------------------------- 
## hr$left: 1
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   126.0   146.0   224.0   207.4   262.0   310.0

Sabemos que os colaboradores que se desligaram trabalharam por mais horas e com faixas salariais inferiores, será que eles conseguiram ficar por muitos anos na empresa?

Mais uma vez temos uma distribuição diferente para os contratados e desligados. No conjunto de dados temos pessoas que trabalharam na empresa entre 2 e 10 anos. Para os que trabalharam por um total de 2 anos, nós observamos a menor diferença entre os contratados e desligados, mas como já percebido antes, mesmo nesse grupo, os desligados tenderam a trabalhar por mais horas. Os dados para os que trabalharam por 3 anos é bem diferente dos outros, eles exibem um novo agrupamento de pessoas que são os desligados que trabalharam menos horas mensais que a média. Durante a seção de gráficos univariados, quando nós imprimimos a distribuição do total de pessoas por anos trabalhados, nós observamos um pico no 3º ano e a partir daí uma queda no total de pessoas por ano após o 4º ano.

summary(hr$average_montly_hours)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    96.0   156.0   200.0   201.1   245.0   310.0

Média de horas trabalhadas no mês para o total de anos trabalhados:

Anos trabalhados Contratado Desligado
2 199.9564 210.7736
3 199.4515 147.3770
4 198.8122 269.6124
5 192.5766 246.3373
6 199.6542 242.2440
7 200.7447 NA
8 193.8025 NA
10 199.2243 NA

Não temos registros de colaboradores desligados que trabalharam por 7 anos ou mais.

Nós vemos uma insatisfação nos colaboradores que deixam a empresa no 3º ou 4º anos. As pessoas que deixaram a empresa no 5º ano, em sua maioria demonstraram uma satisfação baixa ou alta. A maior parte dos desligados que trabalharam na empresa por 6 anos demonstraram um nível de satisfação alto superior a 0.75. O ideal para este caso é que tivéssemos um histórico dos níveis de satisfação destas pessoas, ano após ano, assim conseguiríamos projetar a partir de qual ano a insatisfação tende a aumentar ou diminuir.

Será que há uma variação similar na nota de avaliação recebida por este colaborador durante os anos trabalhados? Para descobrir isso, vamos ver a nota de avaliação por ano trabalhado:

Novamente o 3º ano aparece como um divisor. As pessoas que deixaram a empresa no 3º ano receberam uma nota baixa na última avaliação, fato que não se repete do 4º ao 6º ano, onde a maior parte dos colaboradores desligados receberam notas superiores a 0.8.

Vamos a outra questão: Quem tem mais projetos trabalha mais?

Nós não temos nenhuma informação sobre o nível de complexidade dos projetos, ou sobre o percentual de participação de cada pessoa neles. Essa distribuição me causou uma certa surpresa e saber um pouco mais sobre o projeto nos ajudaria a compreender os seguintes pontos:

  1. Na menor média de horas mensal trabalhada, existe um grupo de pessoas que trabalharam em 6 projetos, num máximo de 7 projetos relatados.
  2. Entre 100 e 200 horas, que é a média dessa variável, também é registrado um grupo que trabalhou em mais de 4 projetos.
  3. As pessoas com 7 projetos trabalharam acima da média de 200 horas, registrando uma média acima de 240 horas mensais.

Achei que pudesse mapear algum departamento que estivesse sobrecarregando o colaborador com muitos projetos, mas todos os departamentos têm pessoas que trabalharam em 4 projetos ou mais. Diferente da minha expectativa, em todos os departamentos foram registradas pessoas com 7 projetos.

Quem trabalhou em mais projetos recebeu mais?

Tanto pessoas com faixa salarial alta, média ou baixa trabalharam em 2 projetos ou mais. 144 pessoas trabalharam em 7 projetos e receberam um baixo salário. Então, respondendo a pergunta, não vi evidências de que quanto maior a quantidade de projetos, melhor a faixa salarial.

Mesmo tendo sofrido acidente de trabalho, os colaboradores permanecem na empresa. Esta variável não parece estar relacionada com a saída do colaborador.

Agora que sabemos a importância das variáveis satisfaction_level e average_montly_hours vamos calcular o valor da correlação de pearson para as variáveis do conjunto de dados hr:

Quanto maior e mais escuro, mais correlacionadas estão as variáveis, as laranjadas tem valores de correlação negativa e as azuis positiva. Vamos confirmar calculando os valores encontrados:

##                       satisfaction_level last_evaluation number_project
## satisfaction_level            1.00000000     0.105021214   -0.142969586
## last_evaluation               0.10502121     1.000000000    0.349332589
## number_project               -0.14296959     0.349332589    1.000000000
## average_montly_hours         -0.02004811     0.339741800    0.417210634
## time_spend_company           -0.10086607     0.131590722    0.196785891
## Work_accident                 0.05869724    -0.007104289   -0.004740548
## left                         -0.38837498     0.006567120    0.023787185
## promotion_last_5years         0.02560519    -0.008683768   -0.006063958
##                       average_montly_hours time_spend_company
## satisfaction_level            -0.020048113       -0.100866073
## last_evaluation                0.339741800        0.131590722
## number_project                 0.417210634        0.196785891
## average_montly_hours           1.000000000        0.127754910
## time_spend_company             0.127754910        1.000000000
## Work_accident                 -0.010142888        0.002120418
## left                           0.071287179        0.144822175
## promotion_last_5years         -0.003544414        0.067432925
##                       Work_accident        left promotion_last_5years
## satisfaction_level      0.058697241 -0.38837498           0.025605186
## last_evaluation        -0.007104289  0.00656712          -0.008683768
## number_project         -0.004740548  0.02378719          -0.006063958
## average_montly_hours   -0.010142888  0.07128718          -0.003544414
## time_spend_company      0.002120418  0.14482217           0.067432925
## Work_accident           1.000000000 -0.15462163           0.039245435
## left                   -0.154621634  1.00000000          -0.061788107
## promotion_last_5years   0.039245435 -0.06178811           1.000000000

Para a variável left foram encontradas as correlações:

  1. satisfaction_level = Essa já era esperada, com o valor -0.39 essa é variável com a correlação mais forte com left
  2. work_accident = Correlação fraca, valor -0.15
  3. time_spend_company = Correlação fraca, valor 0.14
  4. average_montly_hours = Correlação muito fraca, valor 0.07
  5. promotion_last_5years = Correlação muito fraca, valor -0.06

Um pouco mais de visualização gráfica entre as principais variáveis.

ggpairs hr

ggpairs hr

Análise Bivariada

Discuta sobre alguns dos relacionamentos observados nesta parte da investigação. Como os atributos de interesse variaram no conjunto de dados?

Entre os desligados encontramos dois grupos distintos, os que trabalharam por mais horas que a média e, surpreendentemente, os que trabalharam por menos horas mensais.

Nós temos registros de pessoas que trabalharam entre 2 e 10 anos na empresa, mas desligados completaram no máximo 6 anos de trabalho na empresa. Entre os contratados é possível perceber um bom nível de satisfação para os que estão na empresa a mais de 7 anos.

Entre os demitidos verificamos os níveis de insatisfação mais baixos para os colaboradores que trabalharam por 4 ou 5 anos na empresa.

Boa parte dos que tiveram acidente de trabalho durante sua jornada permaneceram na empresa, há uma correlação muito fraca entre essas variáveis de -0.1546.

Em todos os departamentos tivemos pessoas que trabalharam 7 projetos, que foi o máximo registrado. Pessoas que trabalharam em 7 projetos, trabalharam por mais horas no mês, quando comprado com a média de 201 horas mensais. number_project e average_montly_hours tem o valor de correlação mais forte do grupo sendo r² = 0.4172.

Quando analisado a faixa salarial por departamento, observamos que para os desligados encontramos mais pessoas que recebiam salários baixos ou médios. A faixa de salários altos é menos em todos os departamentos. Não foram relatados desligamentos no departamento Management de pessoas com alto salários.

Você observou algum relacionamento interessante entre os outros atributos (os que não são de interesse)?

O relacionamento mais forte foi encontrado entre as variáveis número de projetos e média de horas trabalhadas. Não é claro se o total de projetos trabalhados corresponde a um período, por exemplo, são os projetos trabalhados no mês, no ano, desde a contratação? Supondo que seja mensal, faria todo sentido dizer que quem executou mais projetos, consequentemente pode ter tido que trabalhar mais horas no mês. Saber o nível de complexidade do projeto nos auxiliaria na interpretação da relação da quantidade de projetos e o tempo necessário para executá-lo.

Qual foi o relacionamento mais forte encontrado?

No que interessa a esta análise, que é investigar o porquê alguns colaboradores deixaram a empresa, a variável nível de satisfação é a que tem a correlação mais forte com left, indicador de desligamento. Obteve-se o valor de correlação igual a -0.388375, ou seja, 40% dos desligamentos poderiam ser explicados pelo nível de satisfação, mas isso não significa que seja a causa dele.

Seção de Gráficos Multivariados

Mais uma vez conseguimos visualizar uma distribuição de dados diferente para os que se desligaram da empresa. Eles estão polarizados em dois grupos bem definidos, ora trabalham acima da média ou ora abaixo dela. Nos departamentos Sales e Support há uma incidência maior da faixa de salário médio, mas no grupo dos desligados não é possível observar a prevalência desta faixa, a maioria deles recebeu um baixo salário, mesmo nos casos em que se trabalhou por mais horas.

No departamento Management os deligados também recebiam salários baixos ou medianos.

Nesta análise estamos supondo que as pessoas têm o mesmo cargo dentro do departamento, para que não fique sem sentido a comparação da faixa salarial.

Não conseguimos visualizar uma relação entre trabalhar mais horas e receber mais por isso, mas será quem estava envolvido em mais projetos recebeu mais?

Esse gráfico traz uma informação nova e relevante, só os desligados trabalharam em 7 projetos, mais uma evidência da sobrecarga dos desligados. Os desligados envolvidos em 2 projetos, independente da faixa salarial, predominantemente receberam notas baixas em suas avaliações. As pessoas com mais de 4 projetos tenderam a receber notas melhores em suas avaliações.

Se colocarmos a satisfação do colaborador no foco, será que vemos um gráfico parecido com esse acima?

Temos desligados com os mais diversos níveis de satisfação, a proporção de pessoas por faixa de satisfação e números de projetos pode nos ajudar a entender esses valores.

##               satisfied
## number_project         NAO     REGULAR         SIM
##              2 0.479897894 0.513082323 0.007019783
##              3 0.194444444 0.388888889 0.416666667
##              4 0.078239609 0.078239609 0.843520782
##              5 0.091503268 0.031045752 0.877450980
##              6 0.961832061 0.022900763 0.015267176
##              7 0.980468750 0.019531250 0.000000000

Nesta tabela temos a proporção da satisfação dos desligados por números de projetos. Vemos a polarização novamente, pessoas com 2 projetos demonstraram uma satisfação de baixa a regular. O mesmo acontece para o grupo com 6 ou 7 projetos. Os desligados que trabalharam em 4 ou 5 projetos registraram de forma predominante uma alta satisfação.

Veremos abaixo se algum algum departamento tem colaboradores com mais carga de trabalho que outros.

A partir do 6º projeto há um aumento na média mensal de horas trabalhadas em todos os departamentos. Já pessoas com 2 projetos trabalharam por menos horas também em todos os departamentos.

Porque os bons e satisfeitos estão nos deixando?

Para responder a esta pergunta, o primeiro passo é criar um dataset com os dados dos colaboradores que atendem aos determinados critérios:

  1. Na última avaliação tiveram nota superior a 0.7;
  2. Trabalharam na empresa por mais de 4 anos;
  3. Trabalharam em mais de 5 projetos;
  4. No mês, em média, trabalharam mais de 200 horas
## [1] 961

Foi criado o data.frame hr_func_bons com 961 registros.

Não é nada surpreendente que algumas pessoas tenham decidido sair da empresa, elas trabalharam mais pela mesma faixa de salário. Claro que para uma análise mais efetiva destas variáveis, seria necessário saber, por exemplo, na faixa de altos salários se os valores são os mesmos, ou se os que trabalhavam mais recebiam uma quantia maior, mesmo sendo caracterizado como a mesma faixa.

Essa é a mesma informação do gráfico anterior só que agora dividida por departamento. Os “bons” colaboradores só receberam salários altos nos departamentos sales e product_mg, mas como já sabemos, receberam a mesma faixa só que por mais horas de trabalho.

Será que é perceptível a insatisfação do colaborador?

O que eu quero saber é se é a percepção que o colaborador tem de si, ou seja, seu nível de satisfação se relaciona de alguma forma com a forma como o empregador percebe o colaborador e atribui uma pontuação a ele através da avaliação.

Entre os que se desligaram da empresa, temos três grupos bem distintos:

  1. Insatisfeitos, mas reconhecidos como bons pela empresa; Neste grupo nós temos uma associação claramente negativa entre estas duas variáveis.
  2. Insatisfeitos e não reconhecidos, ou seja, obtiveram nota baixa na avaliação;
  3. Satisfeitos e reconhecidos como bons colaboradores.

Receber uma nota ruim na avaliação não é um atributo comum entre os que saíram.

Excesso de trabalho, foi um fator negativo?

Muitíssimo interessante que entre os desligados a divisão dos insatisfeitos esteja bem clara. Nesta visão, fica evidente, mas sem explicar a causa, o desequilíbrio na hora trabalhada. Respondendo a questão inicial, os insatisfeitos viveram duas situações, a que trabalharam mais que a média e a que trabalharam bem menos que a média mensal para essa variável que são 200 horas mensais. A medida que as horas trabalhadas se aproximaram desta faixa de 200 a 250, a satisfação aumentou.

O mesmo gráfico impresso para o conjunto de dados dos “bons colaboradores” evidencia como os que se desligaram trabalharam em média por mais horas em comparação com os que ainda trabalham na empresa, para esses os pontos no gráfico são mais dispersos.

Vamos imprimir esse mesmo gráfico para os colaboradores que registraram um rendimento inferior.

Neste grupo nós vemos que os que permaneceram na empresa tiveram uma tendência positiva na satisfação, mantendo-se entre 0.5 e 1. Os desligados estavam mais insatisfeitos, talvez porque não desenvolveram seu potencial máximo, ou não foram envolvidos em muitos projetos. Como estamos falando de comportamento humano, fica difícil inferir sobre a motivação real sem conhecer mais variáveis.

## [1] "Total de colaboradores medianos desligados:"
## [1] 1526
## [1] "Total de bons colaboradores desligados:"
## [1] 851
## Aggregation requires fun.aggregate: length used as default
Satisfacao Contratado Desligado
NAO 59 845
REGULAR 28 3
SIM 23 3

Mais uma vez confirmamos que a maior parte dos bons colaboradores desligados era composta por colaboradores insatisfeitos.

Aumentando o contexto vamos comparar o total por faixa tanto para os desligados, quanto para os contratados.

table(hr$satisfied)
## 
##     NAO REGULAR     SIM 
##    3124    5577    6298
by(hr$left==1, hr$satisfied, summary)
## hr$satisfied: NAO
##    Mode   FALSE    TRUE    NA's 
## logical    1389    1735       0 
## -------------------------------------------------------- 
## hr$satisfied: REGULAR
##    Mode   FALSE    TRUE    NA's 
## logical    4674     903       0 
## -------------------------------------------------------- 
## hr$satisfied: SIM
##    Mode   FALSE    TRUE    NA's 
## logical    5365     933       0

A medida que diminui a faixa de satisfação, nós percebemos um aumento no total de desligados e uma diminuição dos contratados.

Já exploramos e tiramos algumas conclusões sobre o relacionamento das variáveis do conjunto de dados, agora vamos criar um modelo linear tendo como variável focal left.

m1 <- lm(left ~ satisfaction_level, data = hr)
m2 <- update(m1, ~ . + time_spend_company)
m3 <- update(m2, ~ . + average_montly_hours)
m4 <- update(m3, ~ . + number_project)
mtable(m1, m2, m3, m4)
## 
## Calls:
## m1: lm(formula = left ~ satisfaction_level, data = hr)
## m2: lm(formula = left ~ satisfaction_level + time_spend_company, 
##     data = hr)
## m3: lm(formula = left ~ satisfaction_level + time_spend_company + 
##     average_montly_hours, data = hr)
## m4: lm(formula = left ~ satisfaction_level + time_spend_company + 
##     average_montly_hours + number_project, data = hr)
## 
## ====================================================================
##                            m1         m2         m3         m4      
## --------------------------------------------------------------------
##   (Intercept)            0.646***   0.526***   0.445***   0.501***  
##                         (0.009)    (0.012)    (0.017)    (0.018)    
##   satisfaction_level    -0.665***  -0.647***  -0.646***  -0.665***  
##                         (0.013)    (0.013)    (0.013)    (0.013)    
##   time_spend_company                0.031***   0.029***   0.033***  
##                                    (0.002)    (0.002)    (0.002)    
##   average_montly_hours                         0.000***   0.001***  
##                                               (0.000)    (0.000)    
##   number_project                                         -0.031***  
##                                                          (0.003)    
## --------------------------------------------------------------------
##   R-squared                  0.2        0.2        0.2        0.2   
##   adj. R-squared             0.2        0.2        0.2        0.2   
##   sigma                      0.4        0.4        0.4        0.4   
##   F                       2663.9     1450.7      985.3      773.5   
##   p                          0.0        0.0        0.0        0.0   
##   Log-likelihood         -7254.4    -7154.2    -7131.3    -7073.6   
##   Deviance                2310.4     2279.7     2272.8     2255.4   
##   AIC                    14514.8    14316.3    14272.6    14159.3   
##   BIC                    14537.7    14346.8    14310.7    14205.0   
##   N                      14999      14999      14999      14999     
## ====================================================================

As variáveis satisfaction_level, time_spend_company, average_montly_hours e number_project obtiveram o mesmo r² de 0.2. 20% é um resultado fraco e abaixo da minha expectativa.

Neste ponto, sei que o nível de satisfação pode estar relacionado com o desligamento do colaborador, por isso vou criar um outro modelo em que esta variável seja o ponto focal para as outras.

m1 <- lm(satisfaction_level ~ average_montly_hours, data = hr)
m2 <- update(m1, ~ . + time_spend_company)
m3 <- update(m3, ~ . + number_project)
m4 <- update(m4, ~ . + promotion_last_5years)
mtable(m1, m2, m3, m4)
## 
## Calls:
## m1: lm(formula = satisfaction_level ~ average_montly_hours, data = hr)
## m2: lm(formula = satisfaction_level ~ average_montly_hours + time_spend_company, 
##     data = hr)
## m3: lm(formula = left ~ satisfaction_level + time_spend_company + 
##     average_montly_hours + number_project, data = hr)
## m4: lm(formula = left ~ satisfaction_level + time_spend_company + 
##     average_montly_hours + number_project + promotion_last_5years, 
##     data = hr)
## 
## =====================================================================
##                             m1         m2         m3         m4      
## ---------------------------------------------------------------------
##   (Intercept)             0.633***   0.680***   0.501***   0.500***  
##                          (0.008)    (0.009)    (0.018)    (0.018)    
##   average_montly_hours   -0.000*    -0.000      0.001***   0.001***  
##                          (0.000)    (0.000)    (0.000)    (0.000)    
##   time_spend_company                -0.017***   0.033***   0.034***  
##                                     (0.001)    (0.002)    (0.002)    
##   satisfaction_level                           -0.665***  -0.662***  
##                                                (0.013)    (0.013)    
##   number_project                               -0.031***  -0.031***  
##                                                (0.003)    (0.003)    
##   promotion_last_5years                                   -0.177***  
##                                                           (0.022)    
## ---------------------------------------------------------------------
##   R-squared                   0.0        0.0        0.2        0.2   
##   adj. R-squared              0.0        0.0        0.2        0.2   
##   sigma                       0.2        0.2        0.4        0.4   
##   F                           6.0       77.5      773.5      634.5   
##   p                           0.0        0.0        0.0        0.0   
##   Log-likelihood           -403.7     -329.7    -7073.6    -7041.2   
##   Deviance                  926.8      917.7     2255.4     2245.6   
##   AIC                       813.5      667.3    14159.3    14096.3   
##   BIC                       836.3      697.8    14205.0    14149.6   
##   N                       14999      14999      14999      14999     
## =====================================================================

20% do nível de satisfação pode ser explicado pelos números de projetos e promoções nos últimos 5 anos. Este relacionamento não implica causalidade.

Para complementar nossa análise vamos criar um novo modelo, usando o método rpart para construir uma árvore de decisão. Ao fim do processo teremos uma visualização boa dos dados.

Primeiro precisamos separar uma amostra de dados de teste e outra de treino. Estou definindo que ela tenha 80% do tamanho do original. Vou alterar o conteúdo de left, 0=Contratado e 1=Demitido.

hr$left <- factor(hr$left, labels=c("Contratado", "Desligado"))

# Cria amostra com 80% do tamanho de hr
sample_size <- floor(0.80 * nrow(hr))

# Set.seed para fins do resultado randomico
set.seed(123)

# Cria lista de índices
train_ind <- sample(seq_len(nrow(hr)), size = sample_size)

# Amostra para treino
train <- hr[train_ind, 1:8]

# Amostra para teste
test <- hr[-train_ind, 1:8 ]

O modelo vai se basear nas variáveis que já foram investigadas até agora e que consideramos importante durante a análise exploratória. O fator a ser predito será left, ou seja, se o colaborador permanecerá ou sairá, e o modelo se baseará no nível de satisfação, nota da última avaliação, média mensal de horas trabalhadas, número de projetos e anos trabalhados na empresa.

# Cria o modelo
fit <- rpart(left ~ satisfaction_level + last_evaluation + 
                    average_montly_hours + number_project + 
                    time_spend_company,
             data=train,
             method="class")

# Prediz o resultado
predicted_hr <- predict(fit, test)


auc(as.numeric(test$left) - 1, predicted_hr[, 2])
## Area under the curve: 0.9713

Uau! O classificador teve uma excelente pontuação de 0.97.

Agora que sabemos que temos um ótimo modelo, vamos plotar a árvore de decisões.

rpart.plot(fit, extra = 104, 
                box.palette="GnBu", 
                branch.lty=3, 
                shadow.col="gray", 
                nn=TRUE)

De fato é um bom modelo, veja como ele espelha e reforça a análise realizada anteriormente, o colaborador com nível de satisfação baixo, muitos projetos, ou satisfeito e trabalhando por muitas horas mensais tem uma probabilidade maior de sair.

Análise Multivariada

Discuta sobre os relacionamentos observados nesta parte da investigação. Quais atributos que fortaleceram os demais na observação das variáveis de interesse?

Quando o nível de satisfação de todo o grupo é analisado fica evidente uma distribuição bem diferente entre os que permanecem na empresa e os que saem. Os colaboradores que ficaram têm uma satisfação de regular a satisfeito, com um volume pequeno de colaboradores insatisfeitos. Entre os que saíram o grupo de insatisfeitos é o maior, demonstrando a correlação observada entre elas, mas não é possível afirmar que a insatisfação seja a causa de uma demissão por exemplo.

As horas mensais trabalhadas também desempenharam um papel importante no grupo dos demitidos, sendo comum encontrar as informações polarizadas em grupos de muitas ou poucas horas trabalhadas mensais.

Interações surpreendentes e/ou interessantes foram encontradas entre os atributos?

Foi uma surpresa descobrir que trabalhar por menos horas que a média mensal foi um fator comum de insatisfação entre os desligados.

Modelos foram criados usando este conjunto de dados? Discuta sobre os pontos fortes e as limitações do seu modelo.

Sim, foram criados três modelos, sendo 2 lineares e uma árvore de decisão.

O 1º modelo linear de regressão teve o objetivo de verificar a relação entre left e as variáveis satisfaction_level, time_spend_company, average_montly_hours, number_project. As variáveis foram selecionadas com base no valor de correlação encontrada entre elas. O resultado recebido foi um pouco decepcionante porque o r² mesmo ajustado só consegue explicar 20% da variável dependente left. Outro valor a ser observado pelo modelo é que há uma alta significância entre as variáveis demonstrado pelo valor de p=0.

No 2º modelo o objetivo do modelo linear de regressão foi relacionar o nível de satisfação com a outras variáveis. Se não estar satisfeito pode estar relacionado, sem ser a causa, com a saída do colaborador, então o que poderia estar relacionado com a baixa satisfação dele? No modelo criado com total de anos trabalhados na empresa e a média mensal de horas trabalhadas tem o menor valor de r²=0, e as variáveis com o número de projetos trabalhados e a existência de promoção nos últimos anos demonstraram uma correlação baixa com a baixa satisfação dele sendo r²=0.2.

Como os dois modelos lineares foram bem-sucedidos, ampliei a análise criando o 3º modelo de árvore de decisão para testar a capacidade do modelo e dos dados de preverem quais colaboradores estão mais propícios a deixarem a empresa. Particularmente eu gosto das árvores de decisões, porque você pode criar modelos de uma maneira rápida, simples e que são eficazes na comunicação do resultado. Usei o rpart.plot para imprimir a sequência de decisões tomadas e ilustrar o que já tinhamos observando durante a análise exploratória.


Gráficos Finais e Sumário

Nós iniciamos este projeto conhecendo um pouco sobre a empresa e seus colaboradores, exploramos variáveis que indicavam a existência de acidente de trabalho, promoções, nível de satisfação, nota recebida na última avaliação, número de projetos, média mensal de horas trabalhadas, salário e departamento. O foco, que nos conduziu até aqui, foi descobrir os motivos que levaram as pessoas a saírem da empresa. Dentro deste contexto, a variável left foi a peça central.

Além de exibir gráficos com a distribuição das variáveis individualmente e das relações entre elas, foram calculados os valores de correlação e criados 2 modelos lineares e uma árvore de decisão.

Para concluir a exploração dos dados serão exibidos 3 gráficos que resumem as observações encontradas.

Primeiro Gráfico

Para começar selecionei as variáveis average_montly_hours e satisfaction_level. A variável satisfaction_level, dentre todas do conjunto de dados, foi a que teve o valor de correlação mais significativo com left, sendo -0.38. Em outros gráficos, average_montly_hours trouxe informações relevantes, demonstrando sempre a existência de uma média mensal superior de horas trabalhadas para os desligados em comparação com os contratados.

Temos uma média de 198 horas mensais trabalhadas para os contratados e 224 horas para os desligados. As máximas registradas foram 287 e 310 horas respectivamente.

Nós vemos aqui um resumo das observações realizadas neste projeto, concluímos que as pessoas que deixaram a empresa estavam sobrecarregadas e insatisfeitas. Para os desligados temos: 1. Os insatisfeitos que trabalharam menos que a média geral (201 horas) e os que trabalharam mais que a média geral e a média dos contratados (198 horas); 2. Os com bom nível de satisfação, mas que também tiveram uma média mensal de horas trabalhadas acima das 201 horas da média geral.

Segundo Gráfico

O segundo gráfico exibe informações com base no número de projetos trabalhados. Essa variável teve um desempenho importante durante a análise bivariada, porque percebemos um comportamento diferente dos dados para os desligados sempre que o número de projetos era adicionado a análise. Abaixo reproduziremos essas observações.

Bem, esse gráfico nos leva às seguintes observações:

  1. Os desligados sobrecarregados com 6 e 7 projetos registraram níveis de insatisfação menores, ficando abaixo de 0.25;
  2. É possível perceber uma insatisfação nos desligados que trabalharam em 2 projetos. O nível de satisfação ficou acima dos 0.25, mas ainda assim abaixo de 0.50.
  3. Os desligados mais satisfeitos trabalharam em 4 ou 5 projetos.

Terceiro Gráfico

Neste gráfico vamos focar a análise só nos desligados. No gráfico 1 vimos o nível de satisfação e horas de trabalho, no gráfico 2 capturamos uma sobrecarga de projetos e agora vamos adicionar a variável last_evaluation para termos uma visão mais ampla do colaborador e a nota dada pela empresa na última avaliação é importante para compreensão do contexto.

As pessoas com 2 projetos experimentam um nível de satisfação baixo ou mediano como já tínhamos visto. Os colaboradores que trabalharam em 4 ou 5 projetos receberam notas boas em suas avaliações e demonstração um bom nível de satisfação. Temos também os que trabalharam em 6 e 7 projetos, eles receberam uma boa avaliação da empresa, mas definitivamente não estavam satisfeitos.

Mesmo que a empresa reconheça o trabalho do colaborador através de uma boa nota em sua avaliação, é provável que ele saia da empresa caso esteja se sentindo sobrecarregado e insatisfeito.


Reflexão

É sempre muito estimulante investigar uma base de dados buscando por fatores que possam auxiliar a uma organização a reter seus talentos e manter-se com um time de alto nível. A limitação desta análise é que ela é baseada em comportamento humano, e as poucas variáveis do conjunto de dados não são suficientes para entregar um resultado consistente que possa ser seguido pela organização. Seria muito produtivo para esta análise sabermos informações sobre os cargos, o nível de satisfação por ano de trabalho, o nível de complexidade dos projetos trabalhados e até mesmo o regime de contratação.

Com as informações disponíveis foi possível identificar o quanto a carga de trabalho é um fator determinante para saída do colaborador. Mesmo que ele tenha obtido uma boa nota na avaliação e esteja satisfeito, se ele estiver com uma carga excessiva de projeto e horas de trabalho ele provavelmente sairá. Mas se ele já está um pouco insatisfeito e a empresa atribuir a ele muitas horas ou menos horas do que a média trabalhada por todos, é possível que ele também saia.

Eu gostaria de ter mais informações sobre o valor monetário do salário. Entender se a remuneração pode ser um fator de insatisfação é difícil quando você não sabe o cargo e o salário real. O que pode ser percebido em relação ao reconhecimento do trabalhado é que foram registradas pouquíssimas promoções, inclusive a proporção de acidentes de trabalho é superior do que a de promoções. Entre os demitidos poucas pessoas tinham um alto salário.

Mesmo não tendo todas as variáveis que considero importante, foi divertido investigar as questões propostas no ínicio deste projeto, eu diria que criar o modelo para a árvore da decisão, e obter um AUC tão alto, foi um dos pontos mais compensadores do processo.

Em trabalhos futuros seria interessante usar o random forest como modelo de predição de resultados, seu algoritmo mais complexo de decisão seria um bom comparativo com o modelo de árvore de decisão usado neste projeto.